package com.wande.dataplatform.filecollection.domain.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 数据加载结果DTO
 *
 * @author wande
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LoadResult implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 是否成功
     */
    private Boolean success;

    /**
     * 总记录数
     */
    private Long totalRecords;

    /**
     * 插入记录数
     */
    private Long insertedRecords;

    /**
     * 更新记录数
     */
    private Long updatedRecords;

    /**
     * 跳过记录数
     */
    private Long skippedRecords;

    /**
     * 失败记录数
     */
    private Long failedRecords;

    /**
     * 错误信息
     */
    private String errorMessage;

    /**
     * 错误详情列表
     */
    @Builder.Default
    private List<LoadError> errors = new ArrayList<>();

    /**
     * 加载耗时（毫秒）
     */
    private Long elapsedTime;

    /**
     * 添加错误
     */
    public void addError(LoadError error) {
        if (this.errors == null) {
            this.errors = new ArrayList<>();
        }
        this.errors.add(error);
    }

    /**
     * 加载错误信息
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class LoadError implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 记录索引
         */
        private Integer recordIndex;

        /**
         * 错误类型
         */
        private String errorType;

        /**
         * 错误消息
         */
        private String errorMessage;

        /**
         * SQL语句
         */
        private String sqlStatement;

        /**
         * 记录数据
         */
        private String recordData;
    }
}
